package com.ssy.lingxi.platform.manage.service;


import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.platform.manage.api.model.dto.area.AreaAddDTO;
import com.ssy.lingxi.platform.manage.api.model.dto.area.AreaDTO;
import com.ssy.lingxi.platform.manage.api.model.vo.area.AreaVO;
import com.ssy.lingxi.platform.manage.api.model.vo.area.LocationVO;
import com.ssy.lingxi.platform.manage.api.model.vo.area.ProvinceVO;
import com.ssy.lingxi.platform.manage.entity.base.Area;
import com.ssy.lingxi.platform.manage.model.response.RegionalInitialsResponse;

import java.util.List;

/**
 * @menu 省市区街道四级联动管理 - 业务处理层
 * @author wrc
 * @version 2.0.0
 * @date 2020/7/20
 */
public interface IAreaService {

    Wrapper<List<String>> findCityCodeByProvinceCode(List<String> provinceCodes);

    Wrapper<List<ProvinceVO>> findProvinceCity();

    Wrapper<List<AreaVO>> areaAll();

    Wrapper<List<AreaVO>> areaList();

    Wrapper<List<AreaVO>> areaByPcodeAll(AreaDTO request);

    Wrapper<List<Area>> areaByPcode(AreaDTO request);

    Long saveOrUpdateArea(AreaAddDTO areaAddRequest);

    void initToRedis();

    void initRegionalInitials();

    /**
     * 根据经纬度获取城市信息
     * @param code 用于定位的API的应用的ID的code
     * @param location 请求数据 格式: 经度,纬度 -> 110.27321,21.60022
     * @return 操作结果
     */
    Wrapper<LocationVO> findByLocation(String code, String location);


    /**
     * 根据ip获取城市信息
     *
     * @param code   用于定位的API的应用的ID的code
     * @param ipAddr ip地址
     * @return 操作结果
     */
    Wrapper<LocationVO> findCityByIP(String code, String ipAddr);

    /**
     * 根据code查询下级区域，不传参数默认获取所有省份 (返回的参数带区域首字母)
     *
     * @param request 请求参数
     * @return 操作结果
     */
    Wrapper<List<RegionalInitialsResponse>> findByPCode(AreaDTO request);

    /**
     * 获取省市(返回的参数带市首字母)
     * @return 操作结果
     */
    Wrapper<List<ProvinceVO>> findProCityFirstName();

}

